昨天已經能夠透過 Go 印出 Hello World 了,今天要來認識資料型別,
如果都準備妥妥的,那我們就開始吧 ─=≡Σ(((っ゚∀゚)っ
由於 Go 在宣告變數或是函式前,會有加上型別的需求,因此了解有哪些常用的型別非常重要。
字串 string : "Hello"
、"Amazing"
布林值 bool : True
、False
整數 int : 123
、28825252
浮點數 float64 : 0.314
、100.002
字串及數字的型別還能再分得更多更細,但在接下來的學習過程可能不會使用到,就先跳過不提。
array 和 slice 在資料的結構上基本上是相同的,但是 array 需要在 []
指定值的數量,因此長度會是固定的。
// [n]type {data}
// n 陣列元素數量、type 陣列元素類型、data 值
[]int
[5]int {1, 2, 3, 4, 5}
初次碰到 array 竟然會指定長度這件事嚇了好大一跳,想說資料不可能每次都固定長度啊,我不想學了...(開玩笑的)
但其實 slice 才更像平常常用的陣列形式,slice 不需要指定長度,使用上更具彈性及實用性。而兩者相同的部分在於陣列內的資料的屬性必須相同,因此字串只能是字串,數字就只能是數字。
關於更詳細的 slice 使用方式,後續會再花篇幅解釋(・ω・)b
// slice
[]string {"Hello", "It's", "Amazing!"}
[]int {5, 2, 0}
map 是以 key: value
為組合的集合,可以透過 key 找到對應的 value。
特別需要注意的是 key 的資料型別必須一致,value 的資料型別也必須一致。
// [] 內放 key 的資料型態,外面放 value 的資料型態
map[string]string{} // => 得到一個空 map
// {} 內的值必須符合定義的型別
map[string]string{"name": "Ba", "age": "18"}
函式在程式語言的輸入輸出中扮演了很重要的角色,Go 的 package 也是依賴函式在做輸出,就來看看函式是如何宣告及應用吧:
// 最基本的起手式
func plus(){
// to do...
}
// 如果想要有輸入參數,則需要規定傳入的型態
func plus(a int, b int) {
fmt.Println(a + b)
}
// 如果有 return 值,也要幫他加上型態
func plus(a int, b int) int {
return a + b
}
指標是用來指向值所存放記憶體位置,並非值本身。因此可以透過記憶體位置,取得在那個記憶體位置的值。
*T
為 type 的指標
var p *int
&
會指向該變數的記憶體位置,如果有透過指標更改變數的值的話,原本在記憶體位置內的值就會被更動。
i := 10
p = &i
fmt.Println(*p) // => 10
*p = 21
fmt.Println(i) // => 21
可以作為自定義型別來使用。
type Cat struct {
Name string
Age int
}
fat := Cat{"BuiBui", 5}
這次沒講到的 goroutine 以及 channel 可以說是 Go 相當大的特色,由於還沒好好了解,待後續篇章再來好好了解及解釋。
今天先到這邊,有任何建議及問題都歡迎與我討論 :)